package pattern.singleton.demo8;

import java.io.Serializable;

/**
 * @Author suzhengzhuang
 * @Email: suzhengzhuang@icloud.com
 * @Date 2024/4/17 10:02
 * @PackageName:pattern.singleton
 * @ClassName: Demo1
 * @Description: TODO 饿汉式 静态成员变量的方式
 * @Version 1.0
 */
public class Singleton implements Serializable {

    // 标志是否第一次调用
    private static boolean flag = false;

    // 1.私有构造方法
    private Singleton() {

        // 防止发生线程不安全问题，使用synchronized同步锁
        synchronized (Singleton.class) {

            // 判断flag是ture还是false，如果是ture说明不是第一次访问，那么直接抛异常即可。如果是false，说明是第一次，就让他正常的创建对象
            if (flag == true) {
                throw new RuntimeException("不能创建多个对象");
            }
            // 将flag的值设置为true
            flag = true;
        }
    }

    // 2.在本类中创建本类对象
    private static Singleton instance = new Singleton();

    // 3.提供一个公共的访问方式，让外界获取该对象
    public static Singleton getInstance() {
        return instance;
    }
}
